module mruby.mrb_debug;

import mruby.value;
import mruby;

extern (C):

enum mrb_debug_line_type
{
	mrb_debug_line_ary = 0,
	mrb_debug_line_flat_map = 1
}

struct mrb_irep_debug_info_line
{
	uint start_pos;
	ushort line;
}

struct mrb_irep_debug_info_file
{
	uint start_pos;
	const(char)* filename;
	mrb_sym filename_sym;
	uint line_entry_count;
	mrb_debug_line_type line_type;
	union
	{
		void* ptr;
		mrb_irep_debug_info_line* flat_map;
		ushort* ary;
	}
}

struct mrb_irep_debug_info
{
	uint pc_count;
	ushort flen;
	mrb_irep_debug_info_file** files;
}

const(char)* mrb_debug_get_filename (mrb_irep* irep, uint pc);
int mrb_debug_get_line (mrb_irep* irep, uint pc);
mrb_irep_debug_info_file* mrb_debug_info_append_file (mrb_state* mrb, mrb_irep* irep, uint start_pos, uint end_pos);
mrb_irep_debug_info* mrb_debug_info_alloc (mrb_state* mrb, mrb_irep* irep);
void mrb_debug_info_free (mrb_state* mrb, mrb_irep_debug_info* d);